<?php
	require_once(dirname(__FILE__) . '/../model/db_driver.php');
    class User{
    	/* possibili ruoli per un allenatore */
    	public static $SA = 3; //super amministratore
    	public static $ADMIN = 2;
		public static $ALLENATORE = 1;
		
    	private $id;
    	private $nome;
		private $cognome;
		private $alias; //il vero nome utente usato per autenticarsi
		private $email;
		private $ruolo;
		private $pwd_md5;
		private $abilitato;
		
		function __construct($_id, $_nome='', $_cognome='', $_alias='', $_email='', $roleId=2, $md5_pwd='', $_abilitato=FALSE){
			$this->id = $_id;
			$this->nome = $_nome;
			$this->cognome=$_cognome;
			$this->alias=$_alias;
			$this->email = $_email;
			$this->ruolo = $roleId;
			$this->pwd_md5 = $md5_pwd;
			$this->abilitato = $_abilitato;
		}
		
		public function getId(){
			return $this->id;
		}
		
		public function getNome(){
			return $this->nome;
		}
		
		public function setNome($nome){
			$this->nome = $nome;
		}
		
		public function getCognome(){
			return $this->cognome;
		}
		
		public function setCognome($cognome){
			$this->cognome = $cognome;
		}
		
		public function getAlias(){
			return $this->alias;
		}
		
		public function setAlias($alias){
			$this->alias = $alias;
		}
		
		public function getEmail(){
			return $this->email;
		}
		
		public function setEmail($email){
			$this->email = $email;
		}
		
		public function getRuolo(){
			return $this->ruolo;
		}
		
		public function setRuolo($ruolo){
			$this->ruolo = $ruolo;
		}
		
		public function getNomeRuolo(){
		/* Restituisce il nome del ruolo per questo utente */
			$ruoli = User::getRuoli();
			return $ruoli[$this->ruolo];
		}
		
		public static function getRuoli(){
		/* Restiutuisce un array in cui l'i-esimo elemento contiene il nome dell'i-esmo ruolo*/
			$ruoli = null;
			if(!isset($_SESSION['dbRuoli'])){
				$ruoli = User::creaRuoli();
				$_SESSION['dbRuoli'] = $ruoli;
			}else {
				$ruoli = $_SESSION['dbRuoli'];
			}
			return $ruoli;
		}
		
		
		
		public function getPasswordMd5(){
			return $this->pwd_md5;
		}
		
		public function changePassword($new_pwd, $old_pwd){
			$db_driver = new DbDriver();
			$md5_new_pwd = $db_driver->getHashedPwd($new_pwd);
			$md5_old_pwd = $db_driver->getHashedPwd($old_pwd);
			if($md5_old_pwd != $this->getPasswordMd5()){
				throw new Exception('La password digitata non corrisponde a quella attuale');
			}
			$db_driver->db_changeUserPassword($this->id, $md5_new_pwd);
			$this->pwd_md5 = $md5_new_pwd;
		}
		
		public function isAbilitato(){
			return $this->abilitato;
		}
		
		public function setAbilitato($abilitato){
			$this->abilitato = (bool)$abilitato;
		}
		
		public function save(){
			$driver = new DbDriver();
			if($this->id == -1){
				$driver->insertUser($this);	
			}else{
				$driver->saveUser($this);
			}
		}
		
		public static function getCurrentUser(){
			if(isset($_SESSION['user'])){
				return $_SESSION['user'];
			}else {
				return null;	
			}
		}
		
		public static function setCurrentUser($user){
		/* Mette in sessione l'oggetto dell'utente autenticato*/
			$_SESSION['user'] = $user; 
		}
		
		public static function getUsers(){
		/* Crea e restituisce la lista di tutti gli utenti del sito */
			$db_driver = new DbDriver(); 
			$utenti = $db_driver->db_getUsers(); /*Array();
			foreach($db_driver->db_getUsers() as $user){
				array_push($utenti, new User(
					$user[0],
					$user[1],
					$user[2],
					$user[3],
					$user[4],
					$user[5],
					$user[6],
					$user[7]
				));
			}*/
			return $utenti;
		}
		
		public static function getUser($id){
			$db_driver = new DbDriver();
			return $db_driver->db_getUserById($id);
		}
		
		private static function creaRuoli(){
			$db_driver = new DbDriver();
			$db_roles = $db_driver->db_getRuoliUtente();
			$ruoli = Array();
			foreach($db_roles as $r){
				$ruoli[$r[0]] = $r[1];
			}
			return $ruoli;
		}
    }
?>